リージョン拒否コントロールを適用した環境の料金について確認してみた
こんにちは。たかやまです。
Control Towerではリージョン拒否コントロール、OrganizationsではSCPを利用することで特定のリージョンのみに利用を制限することができます。
リージョン拒否コントロールを適用するリージョンでは、以後アクセスができなくなるため適用前にリージョンにはリソースが存在しないことを確認することが推奨されています。
注記
リージョン拒否コントロールを有効にする前に、適用するリージョンに既存のリソースがないことを確認してください。コントロールを適用すると、以後そのリージョン内のリソースにアクセスできなくなるためです。このコントロールが有効になっている間は、拒否したリージョンにリソースをデプロイできません。https://docs.aws.amazon.com/ja_jp/controltower/latest/userguide/region-deny.html
上記内容からリソースにアクセスできなくなることは想定できます。
一方で利用できないリソースへの料金はどうなるのでしょうか?
今回はリージョン拒否コントロールを適用しているリソースの料金について気になり確認してみたので、その内容をお伝えします。
さきにまとめ
- リージョン拒否コントロールを適用しているリージョンにリソースが存在する場合、そのリソースに対して料金が発生する
- 不要な料金発生を抑えるためにも、リージョン拒否コントロールを適用している環境に入れる前にリソース削除を実施する
- AWSのリソースの削除には
aws-nuke
の利用が便利 - Organizations連携で展開されているリソースは、管理アカウントでの関連付け設定を解除してからメンバーアカウントでの削除を実施する
- AWSのリソースの削除には
確認してみる
リージョン拒否コントロールの準備
環境はControl Towerを利用していないOrganizationsの環境でSCPでリージョン拒否コントロールを適用してみます。
SCPは以下の内容を設定し、ap-northeast-1
以外は利用できないようします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "NotAction": [ "a4b:*", "access-analyzer:*", "account:*", "acm:*", "activate:*", "artifact:*", "aws-marketplace-management:*", "aws-marketplace:*", "aws-portal:*", "billing:*", "billingconductor:*", "budgets:*", "ce:*", "chatbot:*", "chime:*", "cloudfront:*", "cloudtrail:LookupEvents", "compute-optimizer:*", "config:*", "consoleapp:*", "consolidatedbilling:*", "cur:*", "datapipeline:GetAccountLimits", "devicefarm:*", "directconnect:*", "ec2:DescribeRegions", "ec2:DescribeTransitGateways", "ec2:DescribeVpnGateways", "ecr-public:*", "fms:*", "freetier:*", "globalaccelerator:*", "health:*", "iam:*", "importexport:*", "invoicing:*", "iq:*", "kms:*", "license-manager:ListReceivedLicenses", "lightsail:Get*", "mobileanalytics:*", "networkmanager:*", "notifications-contacts:*", "notifications:*", "organizations:*", "payments:*", "pricing:*", "quicksight:DescribeAccountSubscription", "resource-explorer-2:*", "route53-recovery-cluster:*", "route53-recovery-control-config:*", "route53-recovery-readiness:*", "route53:*", "route53domains:*", "s3:CreateMultiRegionAccessPoint", "s3:DeleteMultiRegionAccessPoint", "s3:DescribeMultiRegionAccessPointOperation", "s3:GetAccountPublicAccessBlock", "s3:GetBucketLocation", "s3:GetBucketPolicyStatus", "s3:GetBucketPublicAccessBlock", "s3:GetMultiRegionAccessPoint", "s3:GetMultiRegionAccessPointPolicy", "s3:GetMultiRegionAccessPointPolicyStatus", "s3:GetStorageLensConfiguration", "s3:GetStorageLensDashboard", "s3:ListAllMyBuckets", "s3:ListMultiRegionAccessPoints", "s3:ListStorageLensConfigurations", "s3:PutAccountPublicAccessBlock", "s3:PutMultiRegionAccessPointPolicy", "savingsplans:*", "shield:*", "sso:*", "sts:*", "support:*", "supportapp:*", "supportplans:*", "sustainability:*", "tag:GetResources", "tax:*", "trustedadvisor:*", "vendor-insights:ListEntitledSecurityProfiles", "waf-regional:*", "waf:*", "wafv2:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:RequestedRegion": [ "ap-northeast-1" ] } } } ] }
SCPはSandboxOU
に適用していきます。
リソースを作成する
リソースはaws-cdk-examplesからapplication-load-balancerを利用してus-east-1
にリソースを作成します。
問題なくリソースが展開されていることが確認できます。
もちろんリージョン制限をかけない状態であれば、us-east-1のリソースは通常通り確認することができます。
リージョン制限を適用する
管理アカウントでOU移動を実施、リージョン制限を適用していきます。
今回リソースをデプロイしたSandboxアカウントSandboxOUに移動していきます。
移動後はリソースをデプロイしたSandboxアカウントのus-east-1のリソースを確認することはできません。
この状態でしばし環境を放置します...
料金を確認する
1日後料金を確認してみます。
ご覧の通り、リージョン制限をかけていたus-east-1において料金が発生していることが確認できます。
今回展開したEC2のリソース以外にOrganizations連携で展開されていたSecurity Hub/GuardDuty/Detectiveの料金も発生していそうです。
リージョン制限で事実上、サービスは利用できない状態になっていますがサービスが存在する場合は料金が発生するのでリージョン制限をかける前にリソースの削除を実施することが重要です。
リソースを削除する方法
特定リージョンのリソースを削除したい場合にはaws-nuke
を利用いただくのが便利です。
aws-nukeは設定しだいで本番環境のリソースを削除する可能性があるため、使用時には十分注意が必要です。リソース削除による損害は使用者の責任となりますので、自己責任において利用してください。
aws-nukeの詳細についてはこちらのブログをご参照ください。
削除保護がかかっているリソースについてはFeature Flags
を利用することで削除することができます。
一方で以下のようなOrganizations連携で展開されているリソースはaws-nukeを使っても削除することはできません。
- Security Hub
- GuardDuty
- Detective
- etc...
AWS Organizations で使用できる AWS のサービス - AWS Organizations
Organizations連携で展開されているリソースについては、管理アカウントでの関連付け設定を解除してからメンバーアカウントでの削除を実施してください。
GuardDutyの例
最後に
なんとなく想像はついていましたが、リージョン制限をかけている場合でもリソースが存在する場合は料金が発生することがわかりました。
リージョン制限をかける前に利用しないリージョンのリソースは削除し、不要な料金が発生しないようにしましょう!
※誤って本番リソースを削除しないように注意してください!!
以上、たかやま(@nyan_kotaroo)でした。